home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 1 / PC Actual CD 01.iso / f1 / cimb.arj / CIMB.C < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-03  |  8.7 KB  |  419 lines

  1. /*==============================================================================
  2.  
  3. FICHERO: CIMB.C
  4.  
  5. AUTOR: ANTONIO LADESA JURADO
  6.  
  7. FECHA: 24/6/94
  8.  
  9. DESCRIPCION:
  10.  
  11.     Fichero principal del programa. Contiene la función main().
  12.     
  13. ==============================================================================*/
  14.  
  15.  
  16. /*---- MODULOS USADOS --------------------------------------------------------*/
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21.  
  22. #include "global.h"
  23. #include "memoria.h"
  24. #include "raton.h"
  25. #include "pcx.h"
  26. #include "mac.h"
  27. #include "img.h"
  28. #include "gif.h"
  29. #include "tga.h"
  30. #include "tiff.h"
  31. #include "bmp.h"
  32. #include "pscript.h"
  33. #include "epson.h"
  34. #include "escala.h"
  35. #include "color.h"
  36. #include "video.h"
  37. #include "menu.h"
  38. #include "teclas.h"
  39. #include "error.h"
  40.  
  41. /*---- ESTRUCTURAS, CONSTANTES Y VARIABLES LOCALES AL MODULO -----------------*/
  42.  
  43.     /* dimensiones de la pantalla */
  44.  /*static int ancho,alto;*/
  45.  
  46.     /* puntero a la imagen */
  47. IMAGEN *c = NULL;
  48.  
  49.     /* accion a realizar sobre la imagen */
  50. extern struct ACCION accion;
  51.  
  52.     /* menu para informar sobre una imagen */
  53. extern int MENUInformar(IMAGEN *c);
  54.  
  55. /*---- FUNCION main() --------------------------------------------------------*/
  56.  
  57. /*---- void main(void) ---------------------------------------------------------
  58.  
  59.     Descripción:
  60.  
  61.         Inicializa el programa y llama a las funciones de tratamiento de las
  62.         imágenes despues de recibir las opciones de los distintos menus
  63.  
  64. ---- CODIGO: -----------------------------------------------------------------*/
  65.  
  66. void main(void)
  67. {
  68.     /* mensaje de uso general */
  69. char mensaje[128];
  70.  
  71.     /* opción */
  72. int opc=0;
  73.  
  74.     /* inicializar video */
  75. if(!VIDEOiniciar())
  76.     {
  77.     printf("\nError: VGA requerida");
  78.     exit(1);
  79.     }
  80.  
  81.     /* inicializar menu principal */
  82. if(!MENUinicio())
  83.     {
  84.     VIDEOcerrar();
  85.     printf("\nRatón no instalado\n");
  86.     exit(1);
  87.     };
  88.  
  89.     /* poner el menu */
  90. MENUponer();
  91. RATONvisible();
  92.  
  93. do
  94.     {
  95.             /* leer opción del menu principal */
  96.   opc = MENUopcion(&accion);
  97.     switch(opc)
  98.         {
  99.             /* leer imagen */
  100.         case OPCargar:
  101.             RATONoculto();
  102.             if(c!=NULL)
  103.                 c = MEMliberar(c);
  104.             sprintf(mensaje,"Cargando %s",accion.fichero);
  105.             ESTADOponer(mensaje);
  106.             switch(accion.tipo)
  107.                 {
  108.                 case PCX:    c = PCXcargar(accion.fichero,c); break;
  109.                 case MACPAINT: c = MACcargar(accion.fichero,c); break;
  110.                 case GIF: c = GIFcargar(accion.fichero,c); break;
  111.                 case TIFF:c = TIFFcargar(accion.fichero,c); break;
  112.                 case IMG: c = IMGcargar(accion.fichero,c); break;
  113.                 case TGA: c = TGAcargar(accion.fichero,c); break;
  114.                 case BMP: c = BMPcargar(accion.fichero,c); break;
  115.                 case OTRO:
  116.                 default:break;
  117.                 };
  118.                 /* ver imagen */
  119.             if(c!=NULL)
  120.                 {
  121.                 VIDEOver(c);
  122.                 MENUponer();
  123.                 }
  124.             else
  125.                 ERRORver();
  126.         break;
  127.  
  128.             /* ver imagen */
  129.         case OPVer:
  130.             RATONoculto();
  131.             if(VIDEOver(c))
  132.                 MENUponer();
  133.             else
  134.                 ERRORver();
  135.         break;
  136.  
  137.             /* salvar imagen */
  138.         case OPSalvar:
  139.             if(c!=NULL)
  140.                 {
  141.                 if(MENUconfirmar("SALVAR FICHERO","Salvar",accion.fichero))
  142.                     {
  143.                     int r;
  144.  
  145.                     RATONoculto();
  146.                     sprintf(mensaje,"Salvando %s",accion.fichero);
  147.                     ESTADOponer(mensaje);
  148.                     switch(accion.tipo)
  149.                         {
  150.                         case PCX: r=PCXsalvar(accion.fichero,c);break;
  151.                         case MACPAINT: r=MACsalvar(accion.fichero,c);break;
  152.                         case GIF: r=GIFsalvar(accion.fichero,c);break;
  153.                         case TIFF:r=TIFFsalvar(accion.fichero,c);break;
  154.                         case IMG: r=IMGsalvar(accion.fichero,c);break;
  155.                         case TGA: r=TGAsalvar(accion.fichero,c);break;
  156.                         case BMP: r=BMPsalvar(accion.fichero,c);break;
  157.                         case OTRO:
  158.                         default:break;
  159.                         }
  160.                     if(!r)
  161.                         ERRORver();
  162.                     else
  163.                         ESTADOquitar();
  164.                     }
  165.                 }
  166.             else
  167.                 {
  168.                 ERRORponer(ERRnoImagen);ERRORver();
  169.                 }
  170.         break;
  171.  
  172.             /* Eliminar imagen de la memoria */
  173.         case OPNuevo:
  174.             if(MENUconfirmar("ABANDONAR IMAGEN",accion.fichero,""))
  175.                 c = MEMliberar(c);
  176.         break;
  177.  
  178.             /* reflejar horizontalmente la imagen */
  179.         case OPReflejoH:
  180.             RATONoculto();
  181.             if(c!=NULL)
  182.                 {
  183.                 sprintf(mensaje,"Reflejando horizontalmente %s",c->nombre);
  184.                 ESTADOponer(mensaje);
  185.                 c = VIDEOinvertirHorizontal(c);
  186.                 VIDEOver(c);
  187.                 MENUponer();
  188.                 }
  189.             else
  190.                 {
  191.                 ERRORponer(ERRnoImagen);ERRORver();
  192.                 }
  193.         break;
  194.  
  195.             /* reflejar verticalmente la imagen */
  196.         case OPReflejoV:
  197.             RATONoculto();
  198.             if(c!=NULL)
  199.                 {
  200.                 sprintf(mensaje,"Reflejando verticalmente %s",c->nombre);
  201.                 ESTADOponer(mensaje);
  202.                 c = VIDEOinvertirVertical(c);
  203.                 VIDEOver(c);
  204.                 MENUponer();
  205.                 }
  206.             else
  207.                 {
  208.                 ERRORponer(ERRnoImagen);ERRORver();
  209.                 }
  210.         break;
  211.  
  212.             /* convertir a blanco y negro. Dithering */
  213.         case OPByN:
  214.             if(c!=NULL)
  215.                 {
  216.                 if(c->modo != VIDEOmono)
  217.                     {
  218.                     opc = MENUByNPoner();
  219.                     if(opc>=0)
  220.                         {
  221.                         RATONoculto();
  222.                         sprintf(mensaje,"Convirtiendo a blanco y negro %s",c->nombre);
  223.                         ESTADOponer(mensaje);
  224.                         if(c->modo == VIDEOega)
  225.                             c= VIDEOvision(c);
  226.                         c = BlancoYNegro(c,opc-OPBayer);
  227.                         VIDEOver(c);
  228.                         MENUponer();
  229.                         }
  230.                     }
  231.                 else
  232.                     {
  233.                     RATONoculto();
  234.                     ERRORponer(ERRmonocromo);ERRORver();
  235.                     }
  236.                 }
  237.             else
  238.                     {
  239.                     ERRORponer(ERRnoImagen);ERRORver();
  240.                     }
  241.         break;
  242.  
  243.             /* Obtener negativo de la imagen */
  244.         case OPVideoInverso:
  245.             RATONoculto();
  246.             if(c!=NULL)
  247.                 {
  248.                 sprintf(mensaje,"Invirtiendo blanco y negro de %s",c->nombre);
  249.                 ESTADOponer(mensaje);
  250.                 c = VideoInverso(c);
  251.                 VIDEOver(c);
  252.                 MENUponer();
  253.                 }
  254.             else
  255.                 {
  256.                 ERRORponer(ERRnoImagen);ERRORver();
  257.                 }
  258.         break;
  259.  
  260.             /* Convertir a tonos de gris */
  261.         case OPGris:
  262.             RATONoculto();
  263.             if(c!=NULL)
  264.                 if(c->modo!=VIDEOmono)
  265.                     {
  266.                     sprintf(mensaje,"Convirtiendo a tonos de gris %s",c->nombre);
  267.                     ESTADOponer(mensaje);
  268.                     c = PonerGris(c);
  269.                     VIDEOver(c);
  270.                     MENUponer();
  271.                     }
  272.                 else
  273.                     {
  274.                     ERRORponer(ERRmonocromo);ERRORver();
  275.                     }
  276.             else
  277.                 {
  278.                 ERRORponer(ERRnoImagen);ERRORver();
  279.                 }
  280.         break;
  281.  
  282.             /* Escalar la paleta de colores */
  283.         case OPColores:
  284.             if(c!=NULL)
  285.                 {
  286.                 int colores = 256;
  287.  
  288.                 opc = MENUcoloresPoner(&colores);
  289.                 if(opc == OPColores)
  290.                     {
  291.                     RATONoculto();
  292.                     if(c->modo != VIDEOvga)
  293.                         c = VIDEOvision(c);
  294.                     sprintf(mensaje,"Convirtiendo %s a %d colores",c->nombre,colores);
  295.                     ESTADOponer(mensaje);
  296.                     c = EscalarColores(c,colores);
  297.                     VIDEOver(c);
  298.                     MENUponer();
  299.                     }
  300.                 }
  301.             else
  302.                 {
  303.                 RATONoculto();
  304.                 ERRORponer(ERRnoImagen);ERRORver();
  305.                 }
  306.         break;
  307.  
  308.             /* Imprimir la imagen */
  309.         case OPImprimir:
  310.             if(c!=NULL)
  311.                 {
  312.         int TipoImpresora = OPEpson;
  313.                 char fichero[128];
  314.  
  315.                 strcpy(fichero,c->nombre);
  316.                 opc = MENUimprimirPoner(&TipoImpresora,fichero);
  317.                 if(opc == OPImpresion)
  318.                     {
  319.                     sprintf(mensaje,"Imprimiendo %s en %s",c->nombre,fichero);
  320.                     ESTADOponer(mensaje);
  321.                     switch(TipoImpresora)
  322.                         {
  323.                         case OPEpson: EPSONimprimir(c,fichero); break;
  324.                         case OPPostScript: POSTSCRIPTimprimir(c,fichero); break;
  325.                         }
  326.                     ERRORver();
  327.                     ESTADOquitar();
  328.                     }
  329.                 }
  330.             else
  331.                 {
  332.                 RATONoculto();
  333.                 ERRORponer(ERRnoImagen);ERRORver();
  334.                 }
  335.         break;
  336.  
  337.             /* Cambiar el modo de visualización */
  338.         case OPVision:
  339.       RATONoculto();
  340.             if(c!=NULL)
  341.                 {
  342.                 c = VIDEOvision(c);
  343.                 VIDEOver(c);
  344.                 MENUponer();
  345.                 }
  346.             else
  347.                 {
  348.                 ERRORponer(ERRnoImagen);ERRORver();
  349.                 }
  350.         break;
  351.  
  352.             /* cambiar el tipo de memoria */
  353.         case OPMemoria:
  354.         c = MEMliberar(c);
  355.         opc = MENUmemoriaPoner();
  356.                 if(opc >=0) MEMSeleccionar(opc);
  357.         break;
  358.  
  359.             /* Escalar la imagen */
  360.         case OPEscalar:
  361.             if( c != NULL)
  362.                 {
  363.         int factorx = 100,factory = 100;
  364.  
  365.         opc = MENUescalaPoner(&factorx,&factory);
  366.                 RATONoculto();
  367.                 if(opc == OPEscalado)
  368.                     {
  369.                     sprintf(mensaje,"Escalando %s",c->nombre);
  370.                     ESTADOponer(mensaje);
  371.                     c = IMAGENescalar(c,factorx,factory);
  372.                     ERRORver();
  373.                     VIDEOver(c);
  374.                     MENUponer();
  375.                     break;
  376.                     }
  377.                 }
  378.             else
  379.                 {
  380.                 RATONoculto();
  381.                 ERRORponer(ERRnoImagen);ERRORver();
  382.                 }
  383.         break;
  384.  
  385.             /* Dar información sobre la imagen */
  386.         case OPInformar:
  387.             if(c!=NULL)
  388.                 MENUInformar(c);
  389.             else
  390.                 {
  391.                 RATONoculto();
  392.                 ERRORponer(ERRnoImagen);
  393.                 ERRORver();
  394.                 }
  395.         break;
  396.  
  397.             /* Borrar o renombrar ficheros DOS */
  398.         case OPBorrar:
  399.         case OPRenombrar:
  400.             MENUficheroDOS(accion.fichero,opc);
  401.         break;
  402.  
  403.             /* salir del programa */
  404.         case OPSalir:
  405.             if(!MENUconfirmar("SALIR DE CIMB","",""))
  406.                 opc = NOOPC;
  407.         break;
  408.         default:
  409.         break;
  410.         };
  411.     }
  412. while(opc !=OPSalir);
  413. VIDEOcerrar();
  414. printf("Gracias por usar CIMB.EXE, ALJ 1994\n");
  415. }
  416.  
  417. /*---- FIN FUNCION -----------------------------------------------------------*/
  418.  
  419.